
import java.io.Serializable;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import java.awt.List;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import java.awt.SystemColor;
import java.awt.Label;
import java.awt.Font;
/**
 * Fenêtre de consultation d'un ouvrage
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */

public class VueConsultOuvrage extends Vue {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField textFieldIsbn;
	private JTextField textFieldTitre;
	private JTextField textFieldEditeur;
	private JTextField textFieldDateEdition;
	private JTextField textFieldNbConsultables;
	private JTextField textFieldNbEmpruntables;
	
	// pour que les boutons soient des attributs, il faut faire "convert local to field"
	private JButton buttonRech;
	private JButton buttonAnnuler;
	private JButton buttonFermer;
	
	private List listAuteurs;
	private List listMotsCLes;
	private Label labelMotsCles;
	private JTextField textFieldNombreReparation;
	
	/**
	 * Create the frame.
	 */
	@SuppressWarnings("deprecation")
	public VueConsultOuvrage(Controleur controleur) {
		super(controleur);
		setTitle("Informations sur un ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 450, 680);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("ISBN");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(35, 67, 61, 15);
		contentPane.add(lblNewLabel);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(112, 64, 114, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("Titre");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(35, 148, 61, 15);
		contentPane.add(lblNewLabel_1);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setEditable(false);
		textFieldTitre.setBounds(112, 145, 250, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsultOuvrage.this);}
		});
		buttonAnnuler.setBounds(255, 98, 107, 25);
		contentPane.add(buttonAnnuler);
		
		buttonRech = new JButton("Rechercher");
		buttonRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().rechOuvrage(textFieldIsbn.getText());
				}
		});
		buttonRech.setBounds(255, 61, 107, 25);
		contentPane.add(buttonRech);
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setEnabled(false);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsultOuvrage.this);}
		});
		buttonFermer.setBounds(174, 606, 107, 25);
		contentPane.add(buttonFermer);
		
		JLabel lblAuteur = new JLabel("Auteur(s)");
		lblAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblAuteur.setBounds(35, 281, 61, 15);
		contentPane.add(lblAuteur);
		
		textFieldEditeur = new JTextField();
		textFieldEditeur.setEditable(false);
		textFieldEditeur.setColumns(10);
		textFieldEditeur.setBounds(112, 185, 250, 19);
		contentPane.add(textFieldEditeur);
		
		JLabel lblEditeur = new JLabel("Editeur");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(35, 188, 61, 15);
		contentPane.add(lblEditeur);
		
		textFieldDateEdition = new JTextField();
		textFieldDateEdition.setEditable(false);
		textFieldDateEdition.setColumns(10);
		textFieldDateEdition.setBounds(112, 215, 114, 19);
		contentPane.add(textFieldDateEdition);
		
		JLabel lblDatedition = new JLabel("Date d'\u00E9dition");
		lblDatedition.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDatedition.setBounds(14, 218, 82, 15);
		contentPane.add(lblDatedition);
		
		JLabel lblNbExemplairesEn = new JLabel("Nombre d'exemplaires en consultation");
		lblNbExemplairesEn.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNbExemplairesEn.setBounds(68, 452, 202, 15);
		contentPane.add(lblNbExemplairesEn);
		
		JLabel lblNbExemplairesEmpruntables = new JLabel("Nombre d'exemplaires empruntables");
		lblNbExemplairesEmpruntables.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNbExemplairesEmpruntables.setBounds(68, 494, 202, 15);
		contentPane.add(lblNbExemplairesEmpruntables);
		
		textFieldNbConsultables = new JTextField();
		textFieldNbConsultables.setEditable(false);
		textFieldNbConsultables.setBounds(280, 449, 82, 19);
		contentPane.add(textFieldNbConsultables);
		textFieldNbConsultables.setColumns(10);
		
		textFieldNbEmpruntables = new JTextField();
		textFieldNbEmpruntables.setEditable(false);
		textFieldNbEmpruntables.setBounds(280, 491, 82, 19);
		contentPane.add(textFieldNbEmpruntables);
		textFieldNbEmpruntables.setColumns(10);
		
		listAuteurs = new List();
		listAuteurs.setEnabled(false);
		listAuteurs.setBackground(SystemColor.menu);
		listAuteurs.setMultipleSelections(false);
		listAuteurs.setBounds(112, 255, 250, 71);
		contentPane.add(listAuteurs);
		
		listMotsCLes = new List();
		listMotsCLes.setBackground(SystemColor.menu);
		listMotsCLes.setBounds(112, 347, 250, 77);
		contentPane.add(listMotsCLes);
		
		labelMotsCles = new Label("Mot(s)-cl\u00E9(s)");
		labelMotsCles.setFont(new Font("Dialog", Font.BOLD, 12));
		labelMotsCles.setForeground(SystemColor.desktop);
		labelMotsCles.setAlignment(Label.RIGHT);
		labelMotsCles.setBounds(14, 367, 82, 22);
		contentPane.add(labelMotsCles);
		
		textFieldNombreReparation = new JTextField();
		textFieldNombreReparation.setEditable(false);
		textFieldNombreReparation.setColumns(10);
		textFieldNombreReparation.setBounds(280, 533, 82, 19);
		contentPane.add(textFieldNombreReparation);
		
		JLabel lbNbExemplairesReparation = new JLabel("Nombre d'exemplaires en r\u00E9paration");
		lbNbExemplairesReparation.setHorizontalAlignment(SwingConstants.RIGHT);
		lbNbExemplairesReparation.setBounds(68, 536, 202, 15);
		contentPane.add(lbNbExemplairesReparation);
		}
	
	/**
	 * alimentation des composants d'affichage en consultant directement l'ouvrage
	 */
	public void alimente(Ouvrage ouv) {
			textFieldTitre.setText(ouv.getTitre());
			//textFieldAuteur.setText(ouv.getAuteur());
			textFieldEditeur.setText(ouv.getEditeur());
			textFieldDateEdition.setText (ESDate.ecrireDate (ouv.getDateEdition()));
			alimenteListeAuteur(ouv.getAuteurs());
			alimenteListeMot(ouv.getMotsCles());
			int nbConsult = ouv.getNbExemplairesEnConsultation();
			int nbEmpr = ouv.getNbExemplairesEmpruntable();
			textFieldNbConsultables.setText (String.valueOf(nbConsult));
			textFieldNbEmpruntables.setText (String.valueOf(nbEmpr));
			this.repaint();
			if ((nbConsult+ nbEmpr)== 0 ){
				Message dialog = new Message("Aucun exemplaire n'est encore disponible");
				dialog.setVisible(true);
			}
	}
	
	public void alimenteListeAuteur(TreeMap<String, Auteur> auteur) {
		
		Set<String> cles = auteur.keySet();
		Iterator<String> it = cles.iterator();
		while (it.hasNext()){
		   String cle = (String) it.next(); // tu peux typer plus finement ici
		   Auteur valeur = auteur.get(cle); // tu peux typer plus finement ici
		   String a = valeur.getAuteur();
		   listAuteurs.add(a);
		}
	}
	
	@SuppressWarnings("deprecation")
	public void alimenteListeMot(TreeMap<String, MotsCles> motsCles) {
		
		Set<String> cles = motsCles.keySet();
		Iterator<String> it = cles.iterator();
		listMotsCLes.clear();
		while (it.hasNext()){
		   String cle = (String) it.next(); // tu peux typer plus finement ici
		   MotsCles valeur = motsCles.get(cle); // tu peux typer plus finement ici
		   String motcle = valeur.getMot();
		   listMotsCLes.add(motcle);
		}
	}
	
	/**
	 * définition des états de la fenêtre, cad des régions actives selon l'état
	 */
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			buttonRech.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			buttonFermer.setEnabled(false);
			break;
			}
		case finale: {
			buttonRech.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			buttonFermer.setEnabled(true);
			break;
			}
		}
	}
}
